package com.hippo.javacore.javaiostream.file;

import java.io.File;

/**
 * @ClassName FileOpt
 * @Description TODO File类常用操作
 * @Author tangxl
 * @create 2023-04-04 11:22
 **/
public class FileOpt {
    public static void main(String[] args) throws Exception {
        /**
         * TODO 创建File对象
         */
        // 创建File对象,指代某个具体的文件
        File f1 = new File("D:\\Txl\\Desktop\\text.txt");
        File f2 = new File("D:/Txl/Desktop/text.txt");
        File f3 = new File("D:" + File.separator + "Txl" + File.separator + "Desktop" + File.separator + "text.txt");
        File f4 = new File("study-commons/java-file-iostream/src/main/resources/file/abc.txt");
        // 文件大小(单位：字节)
        System.out.println(f4.length());
        // 文件是否存在
        System.out.println(f4.exists());

        /**
         * TODO 判断文件类型、获取文件信息
         */
        // 1.创建文件对象，指代某个具体的文件
        File f = new File("study-commons/java-file-iostream/src/main/resources/file/abc.txt");

        // 2.判断当前文件对象，对应的文件路径是否存在，并返回true
        System.out.println(f.exists());

        // 3.判断当前文件对象指代的是否是一个文件，并返回true
        System.out.println(f.isFile());

        // 4.判断当前文件对象指代的是否是一个目录，并返回true
        System.out.println(f.isDirectory());

        // 5.获取文件名称(包含后缀)
        System.out.println(f.getName());

        // 6.获取文件大小，返回字节个数
        System.out.println(f.length());

        // 7.获取文件最后修改时间，返回毫秒值
        System.out.println(f.lastModified()/1000/60/60/24/365+1970);

        // 8.获取创建文件对象时，指定的文件路径
        System.out.println(f.getPath());

        // 9.获取文件的绝对路径
        System.out.println(f.getAbsolutePath());

        /**
         * TODO 创建文件、删除文件
         */

        // 1.创建一个新文件（文件内容为空），创建成功返回true
        File f5 = new File("study-commons/java-file-iostream/src/main/resources/file/a.txt");
        System.out.println(f5.createNewFile());

        // 2.用于创建文件夹，注意：只能创建一级文件夹
        /**
         * 通过指定路径新建File对象，然后调用mkdir()方法，创建文件夹
         * `/aaa`一级路径不存在
         */
        File f6 = new File("study-commons/java-file-iostream/src/main/resources/file/aaa");
        System.out.println(f6.mkdir());

        // 3.用于创建文件夹，注意：可以创建多级文件夹
        /**
         * 通过指定路径新建File对象，然后调用mkdirs()方法，创建文件夹
         * `/bbb/ccc`多级级路径不存在
         */
        File f7 = new File("study-commons/java-file-iostream/src/main/resources/file/aaa/bbb/ccc");
        System.out.println(f7.mkdirs());

        // 4.删除文件或者空文件夹，注意：不能删除非空文件夹
        /**
         * 通过指定路径新建File对象，然后调用delete()方法，删除文件或者空文件夹
         * `/aaa`路径下有`/bbb/ccc`存在不能删除,只能删除空文件夹`ccc`
         */
        File f8 = new File("study-commons/java-file-iostream/src/main/resources/file/aaa");
        System.out.println(f8.delete());


        /**
         * TODO 遍历文件夹
         */
        // 1.获取指定目录下的所有文件和文件夹的名称，返回String数组
        File f9 = new File("study-commons/java-file-iostream/src/main/resources/file");
        String[] names = f9.list();
        for (String name : names) {
            System.out.print(name+"，");
        }
        System.out.println();

        // 2.获取指定目录下的所有文件和文件夹的File对象，返回File数组
        File[] files = f9.listFiles();
        for (File file : files) {
            System.out.print(file+"，");
        }
    }
}
